package com.itany.corejava.code08_常用类.其他类;

import com.itany.corejava.code07_面向对象.租车系统.Car;
import com.itany.corejava.constant.DateUtilConstant;
import com.itany.corejava.util.DateUtil;

import java.util.Calendar;
import java.util.Date;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月15日 10:20
 */
public class Test01_日历类 {
    public static void main(String[] args) {

        //日历类是一个抽象类
        // 静态方法getInstance()来获取一个日历对象
        Calendar calendar=Calendar.getInstance();
        // System.out.println(calendar);//日历对象


        //返回一个此日历对象所表示的Date对象。即:将日历所表示的毫秒数转换成 Date类型
        Date date=calendar.getTime();
        System.out.println(date);
        System.out.println(DateUtil.toString(date));


        // 日历对象.setTime(Date date)设置一个新的日历对象,其值对应的是参数date所表示的时间
        calendar.setTime(DateUtil.getYesterday(new Date()));
        System.out.println(calendar.getTime());//获取的是一个日期对象
        System.out.println(DateUtil.toString(calendar.getTime()));

        //当前时间的12小时后
        Date date2=new Date();
        long time=date2.getTime()+ DateUtilConstant.ONE_DAY_MILLISECONDS/2;
        Date date3=new Date(time);
        System.out.println(date3);
        calendar.setTime(date3);
        System.out.println(calendar.getTime());


        //get(field)根据指定字段获取对应的值
        // System.out.println(Calendar.YEAR);//字段
        System.out.println(calendar.get(Calendar.YEAR)+"年");

        //对于月份的取值0-11
        System.out.println((calendar.get(Calendar.MONTH)+1)+"月");

        //获取日期
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)+"日");

        //获取时
        System.out.println(calendar.get(Calendar.HOUR)+"时");

        //获取分
        System.out.println(calendar.get(Calendar.MINUTE)+"分");

        //获取秒
        System.out.println(calendar.get(Calendar.SECOND)+"秒");

        //获取毫秒
        System.out.println(calendar.get(Calendar.MILLISECOND)+"毫秒");

        //set(字段,值)设置指定字段的值
        // 设置为昨天

        //设置日期
        calendar.set(Calendar.DATE,14);

        //设置时间
        calendar.set(Calendar.HOUR_OF_DAY,10);

        //日历会自动进行运算，当设置的值超出了范围
        // 日历有自动调整时间至正确日期的功能
        // 月份的取值0-11
        // 13表示下一年的2月
        calendar.set(Calendar.MONTH,13);
        System.out.println(calendar.getTime());
        System.out.println(calendar.get(Calendar.DATE));

        // year 2023
        // month 11
        // date 0

        int days=DateUtil.getDay(2000,12);
        System.out.println(days);


        // add(field,值)为给定的日历字段添加或减去指定的时间量,时间量可以是正数也可以是负数
        Calendar calendar2=Calendar.getInstance();
        calendar2.add(Calendar.YEAR,-1);
        calendar2.add(Calendar.MONTH,1);
        calendar2.add(Calendar.DATE,1);
        calendar2.add(Calendar.HOUR_OF_DAY,-1);
        System.out.println(calendar2.getTime());

        System.out.println("毫秒数:"+calendar2.getTimeInMillis());
        // calendar2.clear();//清空日期，1970-01-01 00:00:00
        // System.out.println(DateUtil.toString(calendar2.getTime()));


        Calendar calendar3=Calendar.getInstance();
        calendar3.add(Calendar.MONTH,1);
        System.out.println("年份可能的最大值:"+calendar3.getActualMaximum(Calendar.YEAR));
        System.out.println("月份可能的最大值:"+calendar3.getActualMaximum(Calendar.MONTH));
        System.out.println("天数可能的最大值:"+calendar3.getActualMaximum(Calendar.DATE));
        System.out.println("天数可能的最大值:"+calendar3.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar3.set(Calendar.DATE,16);
        calendar3.set(Calendar.DAY_OF_MONTH,14);

        System.out.println(calendar3.getTime());
        System.out.println("--------------------");
        System.out.println(DateUtil.getDay2(2004,4));
    }
}
